package map.oj;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Num350 {
    //√
    /**
     * 350，两个数的交集
     *给你两个整数数组 nums1 和 nums2 ，请你以数组形式返回两数组的交集。
     * 返回结果中每个元素出现的次数，应与元素在两个数组中都出现的次数一致
     * （如果出现次数不一致，则考虑取较小值）。可以不考虑输出结果的顺序
     */
    public int[] intersect(int[] nums1, int[] nums2) {
        if(nums1.length == 0 || nums2.length == 0){
            return null;
        }
        Map<Integer,Integer> map = new HashMap<Integer,Integer>();
        for (int num : nums1){
            int count = map.getOrDefault(num,0) + 1;
            map.put(num,count);
        }
        List<Integer> ret = new ArrayList<>();
        for (int num : nums2){
            int count = map.getOrDefault(num,0);
            if (count > 0){
                ret.add(num);
                count--;
                //注意从map中要删除一个，保证个数
                if (count > 0){
                    map.put(num,count);
                }else {
                    map.remove(num);
                }
            }
        }
        int[] intersectRet = new int[ret.size()];
        int index2 = 0;
        for (int num : ret){
            intersectRet[index2++] = num;
        }
        return intersectRet;
    }
}
